/* TDP SmartRepair PAC4 */

package edu.uoc.tdp.pac4.servidor.impl;

import java.io.Serializable;
import java.rmi.RemoteException;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;


import edu.uoc.tdp.pac4.common.beans.PecaReparacio;
import edu.uoc.tdp.pac4.common.beans.Reparacio;
import edu.uoc.tdp.pac4.common.beans.S1Usuari;
import edu.uoc.tdp.pac4.common.beans.S2Client;
import edu.uoc.tdp.pac4.common.beans.S3Client;
import edu.uoc.tdp.pac4.common.beans.S3Comanda;
import edu.uoc.tdp.pac4.common.beans.S3MarcaCotxe;
import edu.uoc.tdp.pac4.common.beans.S3Peca;
import edu.uoc.tdp.pac4.common.beans.S3PecaReparacio;
import edu.uoc.tdp.pac4.common.beans.S3StockPeca;
import edu.uoc.tdp.pac4.common.exception.ExcepcioConnexioBD;
import edu.uoc.tdp.pac4.common.exception.ExcepcioUsuari;
import edu.uoc.tdp.pac4.common.exception.S3ExcepcioClient;
import edu.uoc.tdp.pac4.common.exception.S3ExcepcioComanda;
import edu.uoc.tdp.pac4.common.exception.S3ExcepcioMarcaCotxe;
import edu.uoc.tdp.pac4.common.exception.S3ExcepcioMecanics;
import edu.uoc.tdp.pac4.common.exception.S3ExcepcioPeca;
import edu.uoc.tdp.pac4.common.exception.S3ExcepcioPecaReparacio;
import edu.uoc.tdp.pac4.common.exception.S3ExcepcioReparacio;
import edu.uoc.tdp.pac4.common.exception.S3ExcepcioStockPeca;
import edu.uoc.tdp.pac4.common.exception.S3ExcepcioTipusPeca;
import edu.uoc.tdp.pac4.common.interfaces.S3Interface;
import edu.uoc.tdp.pac4.servidor.bbdd.GestorConnexioBD;
import edu.uoc.tdp.pac4.servidor.bbdd.S3GestorClientBD;
import edu.uoc.tdp.pac4.servidor.bbdd.S3GestorComandaBD;
import edu.uoc.tdp.pac4.servidor.bbdd.S3GestorMarcaCotxeBD;
import edu.uoc.tdp.pac4.servidor.bbdd.S3GestorMecanicsBD;
import edu.uoc.tdp.pac4.servidor.bbdd.S3GestorPecaBD;
import edu.uoc.tdp.pac4.servidor.bbdd.S3GestorPecaReparacio;
import edu.uoc.tdp.pac4.servidor.bbdd.S3GestorReparacioBD;
import edu.uoc.tdp.pac4.servidor.bbdd.S3GestorStockPecaBD;
import edu.uoc.tdp.pac4.servidor.bbdd.S3GestorTipusPecaBD;


public class S3Impl extends java.rmi.server.UnicastRemoteObject 
										implements S3Interface, Serializable{

	private static final long serialVersionUID = 1L;
	
	
	private S3GestorStockPecaBD gestorBD;
	private GestorConnexioBD gestorConnexioBD;

	public S3Impl() throws RemoteException, ExcepcioConnexioBD{
		super();
		gestorConnexioBD = new GestorConnexioBD();
	}
	
	
	public S3Impl(int port) throws RemoteException, ExcepcioConnexioBD{
		super(port);
		gestorConnexioBD = new GestorConnexioBD();
	}

	
	public List<S3StockPeca> getStockPecesLst(int idTaller, boolean alerta) throws RemoteException, ExcepcioConnexioBD, S3ExcepcioStockPeca{
		S3GestorStockPecaBD gestorStockPeca = new S3GestorStockPecaBD(gestorConnexioBD);
		return gestorStockPeca.getStockPecesLst(idTaller,alerta);
	}


	
	public List<Reparacio> getReparacionsLst(int idUsuari, int finalitzades) throws RemoteException, ExcepcioConnexioBD, S3ExcepcioReparacio{
		S3GestorReparacioBD gestorReparacio = new S3GestorReparacioBD(gestorConnexioBD);
		return gestorReparacio.getReparacionsLst(idUsuari,finalitzades);
	}


	public List<S3PecaReparacio> getPecesReparacioLst(int idReparacio) throws RemoteException, ExcepcioConnexioBD, S3ExcepcioPecaReparacio{
		S3GestorPecaReparacio gestorPecaReparacio = new S3GestorPecaReparacio(gestorConnexioBD);
		return gestorPecaReparacio.getPecesReparacioLst(idReparacio);
	}



	public void insertComanda(List<S3Comanda> lstComanda) throws RemoteException, ExcepcioConnexioBD, S3ExcepcioComanda {
		S3GestorComandaBD gestorComanda = new S3GestorComandaBD(gestorConnexioBD);
		gestorComanda.insertComanda(lstComanda);

			
	}
	
	public boolean setReparacio(Reparacio reparacio) 
			throws RemoteException, ExcepcioConnexioBD, S3ExcepcioReparacio{
		S3GestorReparacioBD gestorReparacio = new S3GestorReparacioBD(gestorConnexioBD);
		return gestorReparacio.setReparacio(reparacio);
	}


	public List<Reparacio> getReparacionsTallerLst(int idTaller, int acceptada, int assignada) throws RemoteException, ExcepcioConnexioBD, S3ExcepcioReparacio{
		S3GestorReparacioBD gestorReparacio = new S3GestorReparacioBD(gestorConnexioBD);
		return gestorReparacio.getReparacionsTallerLst(idTaller, acceptada, assignada);
	}
	
	public S3Client getClientPerId (int idClient) throws RemoteException, ExcepcioConnexioBD, S3ExcepcioClient{
		S3GestorClientBD gestorClient = new S3GestorClientBD(gestorConnexioBD);
		return gestorClient.getClientPerId(idClient);
	}
	
	public S3MarcaCotxe getMarcaCotxetPerId (int idMarcaCotxe) throws RemoteException, ExcepcioConnexioBD, S3ExcepcioMarcaCotxe{
		S3GestorMarcaCotxeBD gestorMarcaCotxe = new S3GestorMarcaCotxeBD(gestorConnexioBD);
		return gestorMarcaCotxe.getMarcaCotxePerId(idMarcaCotxe);
	}

	public List<S3Peca> getPecesMarcaLst(int idMarca) throws RemoteException, ExcepcioConnexioBD, S3ExcepcioPeca{
		S3GestorPecaBD gestorPeca = new S3GestorPecaBD(gestorConnexioBD);
		return gestorPeca.getPecesMarcaLst(idMarca);
	}
	
	public int getStockPeca(int codipeca) throws RemoteException, ExcepcioConnexioBD, S3ExcepcioStockPeca{
		S3GestorStockPecaBD gestorStock = new S3GestorStockPecaBD(gestorConnexioBD);
		return gestorStock.getStockPeca(codipeca);
	}

	public boolean insertPecaReparacio(PecaReparacio pecareparacio) throws RemoteException, ExcepcioConnexioBD, S3ExcepcioPecaReparacio{
		S3GestorPecaReparacio gestorPecaReparacio = new S3GestorPecaReparacio(gestorConnexioBD);
		return gestorPecaReparacio.insertPecaReparacio(pecareparacio);
	}
	
	public String getNomPeca(int codipeca) throws RemoteException, ExcepcioConnexioBD, S3ExcepcioPeca{
		S3GestorPecaBD gestorPeca = new S3GestorPecaBD(gestorConnexioBD);
		return gestorPeca.getNomPeca(codipeca);
	}
	
	public List<S1Usuari> getMecaniscsLst(int idTaller) throws RemoteException, ExcepcioConnexioBD, S3ExcepcioMecanics{
		S3GestorMecanicsBD gestorMecanics = new S3GestorMecanicsBD(gestorConnexioBD);
		return gestorMecanics.getMecaniscsLst(idTaller);
	}
	
	public int getNumReparacionsMecanic(int idMecanic) throws RemoteException, ExcepcioConnexioBD, S3ExcepcioReparacio{
		S3GestorReparacioBD gestorRepMecanic = new S3GestorReparacioBD(gestorConnexioBD);
		return gestorRepMecanic.getNumReparacionsMecanic(idMecanic);
	}
	
	public double getPreuPeca(int codipeca) throws RemoteException, ExcepcioConnexioBD, S3ExcepcioPeca{
		S3GestorPecaBD gestorPeca = new S3GestorPecaBD(gestorConnexioBD);
		return gestorPeca.getPreuPeca(codipeca);
	}
	
	public String getNomTipusPeca(int idtipus) throws RemoteException, ExcepcioConnexioBD, S3ExcepcioTipusPeca{
		S3GestorTipusPecaBD gestorTipusPeca = new S3GestorTipusPecaBD(gestorConnexioBD);
		return gestorTipusPeca.getNomTipusPeca(idtipus);
	}
	
	public int getIdMarcaPeca(int codipeca) throws RemoteException, ExcepcioConnexioBD, S3ExcepcioPeca{
		S3GestorPecaBD gestorPeca = new S3GestorPecaBD(gestorConnexioBD);
		return gestorPeca.getIdMarcaPeca(codipeca);
	}
		
	public int getIdTipusPeca(int codipeca) throws RemoteException, ExcepcioConnexioBD, S3ExcepcioPeca{
		S3GestorPecaBD gestorPeca = new S3GestorPecaBD(gestorConnexioBD);
		return gestorPeca.getIdTipusPeca(codipeca);
	}
	
	public int getIdProveidorPeca(int codipeca) throws RemoteException, ExcepcioConnexioBD, S3ExcepcioPeca{
		S3GestorPecaBD gestorPeca = new S3GestorPecaBD(gestorConnexioBD);
		return gestorPeca.getIdProveidorPeca(codipeca);
	}
	
	
}
